<?php

declare(strict_types=1);

namespace app\model\admin;

use think\Model;


/**
 * 系统配置表 数据模型类
 */
class EsxdmSysConfigModel extends Model
{
    // 设置当前模型对应的完整数据表名称
    protected $table = 'esxdm_sys_config';

    // 定义时间戳字段名
    protected $createTime = 'created_at';
    protected $updateTime = 'updated_at';

    /**
     * 组件名称 字段内容
     */
    protected $component_name_data = ['textbox' => '文本框', 'numbox' => '数字输入框', 'datebox' => '日期输入框', 'datetimebox' => '日期时间输入框', 'textarea' => '多行文本输入框', 'select' => '下拉框', 'radio' => '单选框', 'checkbox' => '复选框', 'img_uploader' => '图片上传组件', 'file_uploader' => '文件上传组件', 'editor' => '可视化编辑器'];

    /**
     * 返回 组件名称 字段内容
     */
    public function getComponentNameData()
    {
        return $this->component_name_data;
    }

    /**
     * 返回 组件名称 字段获取器的值
     */
    public function getComponentNameTextAttr($value)
    {
        $value = $this->getData('component_name');
        if (is_numeric($value)) {
            $value = intval($value);
        }
        return isset($this->component_name_data[$value]) ? $this->component_name_data[$value] : $value;
    }
    
    /**
     * 状态 字段内容
     */
    protected $status_data = [0 => '禁用', 1 => '启用'];

    /**
     * 返回 状态 字段内容
     */
    public function getStatusData()
    {
        return $this->status_data;
    }

    /**
     * 返回 状态 字段获取器的值
     */
    public function getStatusTextAttr($value)
    {
        $value = $this->getData('status');
        if (is_numeric($value)) {
            $value = intval($value);
        }
        return isset($this->status_data[$value]) ? $this->status_data[$value] : $value;
    }
    
    /**
     * 是否锁定 字段内容
     */
    protected $is_locked_data = [0 => '否', 1 => '是'];

    /**
     * 返回 是否锁定 字段内容
     */
    public function getIsLockedData()
    {
        return $this->is_locked_data;
    }

    /**
     * 返回 是否锁定 字段获取器的值
     */
    public function getIsLockedTextAttr($value)
    {
        $value = $this->getData('is_locked');
        if (is_numeric($value)) {
            $value = intval($value);
        }
        return isset($this->is_locked_data[$value]) ? $this->is_locked_data[$value] : $value;
    }

    /**
     * 从配置文件创建数据记录
     */
    public static function createRecordsByConfig($config)
    {
        if (!is_array($config)) {
            return;
        }
        $titles = [
            'app_name' => '站点名称',
            'app_version' => '版本号',
            'icp_license' => 'ICP 备案号',
            'ip_allowlist' => 'IP 黑名单',
            'ip_denylist' => 'IP 白名单',
            'email_transport' => '邮件发送方式',
            'smtp_host' => 'SMTP 服务器',
            'smtp_port' => 'SMTP 端口',
            'smtp_username' => 'SMTP 用户名',
            'smtp_password' => 'SMTP 密码',
            'smtp_address' => '发件人邮箱',
        ];
        $data = [];
        foreach ($config as $key => $value) {
            $data = [
                'group_name' => 'site',
                'conf_name' => $key,
                'conf_title' => isset($titles[$key]) ? $titles[$key] : $key,
                'conf_type' => gettype($value), // 类型(string,text,int,bool,array,datetime,date,file)
                'conf_value' => is_array($value) ? json_encode($value) : $value,
                'conf_content' => '',
            ];
            self::create($data);
        }
    }
}
